
import random
from constantes import *
from pila import *

class Tarjeta(object):
	"""Implementacion de una tarjeta de pais."""

	def __init__(self, pais, tipo):
		"""Constructor desde pais y tipo."""
		self.pais = pais
		self.tipo = tipo

	def __str__(self):
		"""Representacion grafica."""
		return "(%s, %s)" % (self.pais, NOMBRE_TARJETAS[self.tipo])

class Mazo(object):
	"""Implementacion del mazo de tarjetas de pais."""

	def __init__(self, paises_por_tarjeta):
		"""Creacion desde un diccionario de paises segun tipo.
		Debe inicializar el mazo con todas las tarjetas mezcladas."""
		self.mazo = Pila()
		self.devueltas = []
		self.len = 0
		self.usadas = []
		
		paises = []
		for tipo in paises_por_tarjeta:
			paises += paises_por_tarjeta[tipo]
			
		while paises != []:
			pais = paises.pop(random.randrange(0, len(paises)))
			for tipo in paises_por_tarjeta:
				if pais in paises_por_tarjeta[tipo]:
					self.mazo.apilar(Tarjeta(pais, tipo))
					self.len += 1
					break
			
	def sacar_tarjeta(self):
		"""Saca una tarjeta del mazo.
		Si el mazo se acabara, debe mezclar y empezar a repartir desde
		las tarjetas ya devueltas."""
		if not self.mazo.esta_vacia():
			self.len -= 1
			return self.mazo.desapilar()
			
		else:
			while len(self.devueltas) > 1:
				pais = self.devueltas.pop(random.randrange(0, len(self.devueltas)))
				self.mazo.apilar(pais)
			self.len -=1
			return self.devueltas.pop()

	def devolver_tarjeta(self, tarjeta):
		"""Recibe una tarjeta y la guarda en el pilon de tarjetas
		devueltas. Cuando se acaben las tarjetas del mazo, se mezclaran
		las ya devueltas."""
		self.devueltas.append(tarjeta)
		self.len += 1

	def cantidad_tarjetas(self):
		"""Devuelve la cantidad *total* de tarjetas (tanto en el mazo
		como devueltas)."""
		return self.len